🎖️GitЯра🎖️
src/helpers/MultiSerialInterface.h 890a2e2cffa98dea3ca88db3c3aba72ef23ff3f7 (890a2e2c) Text, 4.29 KB
Tff7b72#Tff7b72pragma once
Tff7b72#Tff7b72include T8b949e"BaseSerialInterface.h"
Tff7b72#Tff7b72ifndef MAX_INTERFACES
T8b949e// ble, usb, wifi, ethernet
Tff7b72#Tff7b72define MAX_INTERFACES 4
Tff7b72#Tff7b72endif
Tff7b72enum Te6edf3class Te6edf3InterfaceType Tff7b72: Tffa657uint8_t Tb4b4b4{
Te6edf3NONETb4b4b4,
Te6edf3BluetoothTb4b4b4,
Te6edf3USBTb4b4b4,
Te6edf3WiFiTb4b4b4,
Te6edf3EthernetTb4b4b4,
Te6edf3HardwareSerial
Tb4b4b4}Tb4b4b4;
Te6edf3class Te6edf3MultiSerialInterface Tff7b72: Te6edf3public Te6edf3BaseSerialInterface Tb4b4b4{
Te6edf3privateTff7b72:
Tff7b72struct T56d364RegisteredInterface Tb4b4b4{
Te6edf3InterfaceType Te6edf3type Tff7b72= Te6edf3InterfaceTypeTff7b72:Tff7b72:Te6edf3NONETb4b4b4;
Te6edf3BaseSerialInterfaceTff7b72* Te6edf3instance Tff7b72= Tffa657nullptrTb4b4b4;
Tb4b4b4}Tb4b4b4;
Tffa657bool Te6edf3_enabled Tff7b72= Tffa657falseTb4b4b4;
Te6edf3RegisteredInterface Te6edf3_interfacesTb4b4b4[Te6edf3MAX_INTERFACESTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Te6edf3publicTff7b72:
Tffa657bool Te6edf3addInterfaceTb4b4b4(Te6edf3InterfaceType Te6edf3typeTb4b4b4, Te6edf3BaseSerialInterfaceTff7b72* Te6edf3ifaceTb4b4b4) Tb4b4b4{
T8b949e// make sure an interface was provided
Tff7b72ifTb4b4b4(Te6edf3iface Tff7b72=Tff7b72= Tffa657nullptrTb4b4b4)Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
T8b949e// put it in the first free slot
Tff7b72forTb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3MAX_INTERFACESTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3_interfacesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4.Te6edf3instance Tff7b72=Tff7b72= Tffa657nullptrTb4b4b4)Tb4b4b4{
Te6edf3_interfacesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4.Te6edf3instance Tff7b72= Te6edf3ifaceTb4b4b4;
Te6edf3_interfacesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4.Te6edf3type Tff7b72= Te6edf3typeTb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e// no free slots available
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tffa657bool Te6edf3removeInterfaceTb4b4b4(Te6edf3BaseSerialInterfaceTff7b72* Te6edf3ifaceTb4b4b4) Tb4b4b4{
T8b949e// make sure an interface was provided
Tff7b72ifTb4b4b4(Te6edf3iface Tff7b72=Tff7b72= Tffa657nullptrTb4b4b4)Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
T8b949e// find and remove interface
Tff7b72forTb4b4b4(Tffa657int Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3MAX_INTERFACESTb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3_interfacesTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4.Te6edf3instance Tff7b72=Tff7b72= Te6edf3ifaceTb4b4b4)Tb4b4b4{
Te6edf3_interfacesTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e// interface not found
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tffa657void Te6edf3enableBluetoothTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72forTb4b4b4(Tff7b72auto Te6edf3iface Tff7b72: Te6edf3_interfacesTb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instance Tff7b72&Tff7b72& Te6edf3ifaceTb4b4b4.Te6edf3type Tff7b72=Tff7b72= Te6edf3InterfaceTypeTff7b72:Tff7b72:Te6edf3BluetoothTb4b4b4)Tb4b4b4{
Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3enableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657void Te6edf3disableBluetoothTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72forTb4b4b4(Tff7b72auto Te6edf3iface Tff7b72: Te6edf3_interfacesTb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instance Tff7b72&Tff7b72& Te6edf3ifaceTb4b4b4.Te6edf3type Tff7b72=Tff7b72= Te6edf3InterfaceTypeTff7b72:Tff7b72:Te6edf3BluetoothTb4b4b4)Tb4b4b4{
Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3disableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657bool Te6edf3isBluetoothEnabledTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72forTb4b4b4(Tff7b72auto Te6edf3iface Tff7b72: Te6edf3_interfacesTb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instance Tff7b72&Tff7b72& Te6edf3ifaceTb4b4b4.Te6edf3type Tff7b72=Tff7b72= Te6edf3InterfaceTypeTff7b72:Tff7b72:Te6edf3BluetoothTb4b4b4)Tb4b4b4{
Tff7b72return Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3isEnabledTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
T8b949e// enable all interfaces
Tffa657void Te6edf3enableTb4b4b4(Tb4b4b4) Te6edf3override Tb4b4b4{
Te6edf3_enabled Tff7b72= Tffa657trueTb4b4b4;
Tff7b72forTb4b4b4(Tff7b72auto Te6edf3iface Tff7b72: Te6edf3_interfacesTb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instanceTb4b4b4)Tb4b4b4{
Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3enableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// disable all interfaces
Tffa657void Te6edf3disableTb4b4b4(Tb4b4b4) Te6edf3override Tb4b4b4{
Te6edf3_enabled Tff7b72= Tffa657falseTb4b4b4;
Tff7b72forTb4b4b4(Tff7b72auto Te6edf3iface Tff7b72: Te6edf3_interfacesTb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instanceTb4b4b4)Tb4b4b4{
Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3disableTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657bool Te6edf3isEnabledTb4b4b4(Tb4b4b4) Tff7b72const Te6edf3override Tb4b4b4{
Tff7b72return Te6edf3_enabledTb4b4b4;
Tb4b4b4}
Tffa657bool Te6edf3isConnectedTb4b4b4(Tb4b4b4) Tff7b72const Te6edf3override Tb4b4b4{
T8b949e// not connected when disabled
Tff7b72ifTb4b4b4(Tff7b72!Te6edf3_enabledTb4b4b4)Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
T8b949e// check if any interface is connected
Tff7b72forTb4b4b4(Tff7b72auto Te6edf3iface Tff7b72: Te6edf3_interfacesTb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instance Tff7b72&Tff7b72& Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3isConnectedTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e// nothing connected
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
T8b949e// loop all interfaces
Tffa657void Te6edf3loopTb4b4b4(Tb4b4b4) Te6edf3override Tb4b4b4{
Tff7b72forTb4b4b4(Tff7b72auto Te6edf3iface Tff7b72: Te6edf3_interfacesTb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instanceTb4b4b4)Tb4b4b4{
Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3loopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tffa657bool Te6edf3isWriteBusyTb4b4b4(Tb4b4b4) Tff7b72const Te6edf3override Tb4b4b4{
T8b949e// not busy when disabled
Tff7b72ifTb4b4b4(Tff7b72!Te6edf3_enabledTb4b4b4)Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
T8b949e// check if any interface is busy
Tff7b72forTb4b4b4(Tff7b72auto Te6edf3iface Tff7b72: Te6edf3_interfacesTb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instance Tff7b72&Tff7b72& Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3isEnabledTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3isWriteBusyTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4{
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e// nothing busy
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tffa657size_t Te6edf3writeFrameTb4b4b4(Tff7b72const Tffa657uint8_t Te6edf3srcTb4b4b4[Tb4b4b4]Tb4b4b4, Tffa657size_t Te6edf3lenTb4b4b4) Te6edf3override Tb4b4b4{
T8b949e// don't write when disabled or nothing provided
Tff7b72ifTb4b4b4(Tff7b72!Te6edf3_enabled Tff7b72|Tff7b72| Te6edf3len Tff7b72=Tff7b72= T79c0ff0Tb4b4b4)Tb4b4b4{
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}
T8b949e// write frame to all enabled interfaces
Tffa657bool Te6edf3allSuccessful Tff7b72= Tffa657trueTb4b4b4;
Tff7b72forTb4b4b4(Tff7b72auto Te6edf3iface Tff7b72: Te6edf3_interfacesTb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instance Tff7b72&Tff7b72& Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3isEnabledTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3writeFrameTb4b4b4(Te6edf3srcTb4b4b4, Te6edf3lenTb4b4b4) Tff7b72!Tff7b72= Te6edf3lenTb4b4b4)Tb4b4b4{
Te6edf3allSuccessful Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// report success if all writes completed successfully
Tff7b72return Te6edf3allSuccessful Tff7b72? Te6edf3len Tff7b72: T79c0ff0Tb4b4b4;
Tb4b4b4}
Tffa657size_t Te6edf3checkRecvFrameTb4b4b4(Tffa657uint8_t Te6edf3destTb4b4b4[Tb4b4b4]Tb4b4b4) Te6edf3override Tb4b4b4{
T8b949e// don't read when disabled
Tff7b72ifTb4b4b4(Tff7b72!Te6edf3_enabledTb4b4b4)Tb4b4b4{
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}
T8b949e// try to read a frame from any enabled interface
Tff7b72forTb4b4b4(Tff7b72auto Te6edf3iface Tff7b72: Te6edf3_interfacesTb4b4b4)Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3ifaceTb4b4b4.Te6edf3instance Tff7b72&Tff7b72& Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3isEnabledTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4{
Tffa657size_t Te6edf3frameSize Tff7b72= Te6edf3ifaceTb4b4b4.Te6edf3instanceTff7b72-Tff7b72>Te6edf3checkRecvFrameTb4b4b4(Te6edf3destTb4b4b4)Tb4b4b4;
Tff7b72ifTb4b4b4(Te6edf3frameSize Tff7b72> T79c0ff0Tb4b4b4)Tb4b4b4{
Tff7b72return Te6edf3frameSizeTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
T8b949e// no frame received
Tff7b72return T79c0ff0Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4;
Served by rngit 1.5.0 - Generated in 0.07s